package top.tagao.m03_beHavioralPatterns.b_02_strategy;

import top.tagao.m03_beHavioralPatterns.b_02_strategy.order.Order;
import top.tagao.m03_beHavioralPatterns.b_02_strategy.strategies.PayByPayPal;

/**
 * 策略模式
 * @author Viktor_Liu
 * @Date 2022/8/13 15:59
 * 1.策略 （Strategy） 接口是所有具体策略的通用接口， 它声明了一个上下文用于执行策略的方法。
 * 2.具体策略 （Concrete Strategies） 实现了上下文所用算法的各种不同变体。
 * 3.上下文 （Context） 维护指向具体策略的引用， 且仅通过策略接口与该对象进行交流。
 */
public class Main {
    public static void main(String[] args) {
        // 1. 创建上下文环境
        Order order = new Order();
        order.setTotalCost(100);

        // 2. 创建具体策略，放入上下文环境
        PayByPayPal payByPayPal = new PayByPayPal();

        order.processOrder(payByPayPal);
        payByPayPal.pay(order.getTotalCost());

    }
}
